{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ikhIvrku-i-L"
   },
   "source": [
    "# Building deep retrieval models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "rrDVNe7Vdqhr"
   },
   "source": [
    "In [the featurization tutorial](featurization) we incorporated multiple features into our models, but the models consist of only an embedding layer. We can add more dense layers to our models to increase their expressive power.\n",
    "\n",
    "In general, deeper models are capable of learning more complex patterns than shallower models. For example, our [user model](featurization#user_model) incorporates user ids and timestamps to model user preferences at a point in time. A shallow model (say, a single embedding layer) may only be able to learn the simplest relationships between those features and movies: a given movie is most popular around the time of its release, and a given user generally prefers horror movies to comedies. To capture more complex relationships, such as user preferences evolving over time, we may need a deeper model with multiple stacked dense layers.\n",
    "\n",
    "Of course, complex models also have their disadvantages. The first is computational cost, as larger models require both more memory and more computation to fit and serve. The second is the requirement for more data: in general, more training data is needed to take advantage of deeper models. With more parameters, deep models might overfit or even simply memorize the training examples instead of learning a function that can generalize. Finally, training deeper models may be harder, and more care needs to be taken in choosing settings like regularization and learning rate.\n",
    "\n",
    "Finding a good architecture for a real-world recommender system is a complex art, requiring good intuition and careful [hyperparameter tuning](https://en.wikipedia.org/wiki/Hyperparameter_optimization). For example, factors such as the depth and width of the model, activation function, learning rate, and optimizer can radically change the performance of the model. Modelling choices are further complicated by the fact that good offline evaluation metrics may not correspond to good online performance, and that the choice of what to optimize for is often more critical than the choice of model itself.\n",
    "\n",
    "Nevertheless, effort put into building and fine-tuning larger models often pays off. In this tutorial, we will illustrate how to build deep retrieval models using TensorFlow Recommenders. We'll do this by building progressively more complex models to see how this affects model performance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "D7RYXwgbAcbU"
   },
   "source": [
    "## Preliminaries\n",
    "\n",
    "We first import the necessary packages."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "XbwMjnLP5nZ_"
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import tempfile\n",
    "\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "%config InlineBackend.figure_format='retina'\n",
    "\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import tensorflow_datasets as tfds\n",
    "\n",
    "import tensorflow_recommenders as tfrs\n",
    "\n",
    "plt.style.use('seaborn-whitegrid')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "tgKIjpQLAiax"
   },
   "source": [
    "In this tutorial we will use the models from [the featurization tutorial](featurization) to generate embeddings. Hence we will only be using the user id, timestamp, and movie title features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "kc2REbOO52Fl"
   },
   "outputs": [],
   "source": [
    "ratings = tfds.load(\"movie_lens/100k-ratings\", split=\"train\")\n",
    "movies = tfds.load(\"movie_lens/100k-movies\", split=\"train\")\n",
    "\n",
    "ratings = ratings.map(lambda x: {\n",
    "    \"movie_title\": x[\"movie_title\"],\n",
    "    \"user_id\": x[\"user_id\"],\n",
    "    \"timestamp\": x[\"timestamp\"],\n",
    "})\n",
    "movies = movies.map(lambda x: x[\"movie_title\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "5YZ2q5RXYNI6"
   },
   "source": [
    "We also do some housekeeping to prepare feature vocabularies."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "G5CVveCS9Doq"
   },
   "outputs": [],
   "source": [
    "timestamps = np.concatenate(list(ratings.map(lambda x: x[\"timestamp\"]).batch(100)))\n",
    "\n",
    "max_timestamp = timestamps.max()\n",
    "min_timestamp = timestamps.min()\n",
    "\n",
    "timestamp_buckets = np.linspace(\n",
    "    min_timestamp, max_timestamp, num=1000,\n",
    ")\n",
    "\n",
    "unique_movie_titles = np.unique(np.concatenate(list(movies.batch(1000))))\n",
    "unique_user_ids = np.unique(np.concatenate(list(ratings.batch(1_000).map(\n",
    "    lambda x: x[\"user_id\"]))))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "mFJcCVMUQou3"
   },
   "source": [
    "## Model definition"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "PtS6a4sgmI-c"
   },
   "source": [
    "### Query model\n",
    "\n",
    "We start with the user model defined in [the featurization tutorial](featurization) as the first layer of our model, tasked with converting raw input examples into feature embeddings."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "_ItzYwMW42cb"
   },
   "outputs": [],
   "source": [
    "class UserModel(tf.keras.Model):\n",
    "  \n",
    "  def __init__(self):\n",
    "    super().__init__()\n",
    "\n",
    "    self.user_embedding = tf.keras.Sequential([\n",
    "        tf.keras.layers.experimental.preprocessing.StringLookup(\n",
    "            vocabulary=unique_user_ids, mask_token=None),\n",
    "        tf.keras.layers.Embedding(len(unique_user_ids) + 1, 32),\n",
    "    ])\n",
    "    self.timestamp_embedding = tf.keras.Sequential([\n",
    "        tf.keras.layers.experimental.preprocessing.Discretization(timestamp_buckets.tolist()),\n",
    "        tf.keras.layers.Embedding(len(timestamp_buckets) + 1, 32),\n",
    "    ])\n",
    "    self.normalized_timestamp = tf.keras.layers.experimental.preprocessing.Normalization()\n",
    "\n",
    "    self.normalized_timestamp.adapt(timestamps)\n",
    "\n",
    "  def call(self, inputs):\n",
    "    # Take the input dictionary, pass it through each input layer,\n",
    "    # and concatenate the result.\n",
    "    return tf.concat([\n",
    "        self.user_embedding(inputs[\"user_id\"]),\n",
    "        self.timestamp_embedding(inputs[\"timestamp\"]),\n",
    "        self.normalized_timestamp(inputs[\"timestamp\"]),\n",
    "    ], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "hMQzxLqh42on"
   },
   "source": [
    "Defining deeper models will require us to stack mode layers on top of this first input. A progressively narrower stack of layers, separated by an activation function, is a common pattern:\n",
    "\n",
    "```\n",
    "                            +----------------------+\n",
    "                            |      128 x 64        |\n",
    "                            +----------------------+\n",
    "                                       | relu\n",
    "                          +--------------------------+\n",
    "                          |        256 x 128         |\n",
    "                          +--------------------------+\n",
    "                                       | relu\n",
    "                        +------------------------------+\n",
    "                        |          ... x 256           |\n",
    "                        +------------------------------+\n",
    "```\n",
    "Since the expressive power of deep linear models is no greater than that of shallow linear models, we use ReLU activations for all but the last hidden layer. The final hidden layer does not use any activation function: using an activation function would limit the output space of the final embeddings and might negatively impact the performance of the model. For instance, if ReLUs are used in the projection layer, all components in the output embedding would be non-negative.\n",
    "\n",
    "We're going to try something similar here. To make experimentation with different depths easy, let's define a model whose depth (and width) is defined by a set of constructor parameters. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "5qfPi4I-Z0ph"
   },
   "outputs": [],
   "source": [
    "class QueryModel(tf.keras.Model):\n",
    "  \"\"\"Model for encoding user queries.\"\"\"\n",
    "\n",
    "  def __init__(self, layer_sizes):\n",
    "    \"\"\"Model for encoding user queries.\n",
    "\n",
    "    Args:\n",
    "      layer_sizes:\n",
    "        A list of integers where the i-th entry represents the number of units\n",
    "        the i-th layer contains.\n",
    "    \"\"\"\n",
    "    super().__init__()\n",
    "\n",
    "    # We first use the user model for generating embeddings.\n",
    "    self.embedding_model = UserModel()\n",
    "\n",
    "    # Then construct the layers.\n",
    "    self.dense_layers = tf.keras.Sequential()\n",
    "\n",
    "    # Use the ReLU activation for all but the last layer.\n",
    "    for layer_size in layer_sizes[:-1]:\n",
    "      self.dense_layers.add(tf.keras.layers.Dense(layer_size, activation=\"relu\"))\n",
    "\n",
    "    # No activation for the last layer.\n",
    "    for layer_size in layer_sizes[-1:]:\n",
    "      self.dense_layers.add(tf.keras.layers.Dense(layer_size))\n",
    "    \n",
    "  def call(self, inputs):\n",
    "    feature_embedding = self.embedding_model(inputs)\n",
    "    return self.dense_layers(feature_embedding)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "B9IqNTLmpJzs"
   },
   "source": [
    "The `layer_sizes` parameter gives us the depth and width of the model. We can vary it to experiment with shallower or deeper models."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "XleMceZNHC__"
   },
   "source": [
    "### Candidate model\n",
    "\n",
    "We can adopt the same approach for the movie model. Again, we start with the `MovieModel` from the [featurization](featurization) tutorial:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "oQZHX8bEHPOk"
   },
   "outputs": [],
   "source": [
    "class MovieModel(tf.keras.Model):\n",
    "  \n",
    "  def __init__(self):\n",
    "    super().__init__()\n",
    "\n",
    "    max_tokens = 10_000\n",
    "\n",
    "    self.title_embedding = tf.keras.Sequential([\n",
    "      tf.keras.layers.experimental.preprocessing.StringLookup(\n",
    "          vocabulary=unique_movie_titles,mask_token=None),\n",
    "      tf.keras.layers.Embedding(len(unique_movie_titles) + 1, 32)\n",
    "    ])\n",
    "\n",
    "    self.title_vectorizer = tf.keras.layers.experimental.preprocessing.TextVectorization(\n",
    "        max_tokens=max_tokens)\n",
    "\n",
    "    self.title_text_embedding = tf.keras.Sequential([\n",
    "      self.title_vectorizer,\n",
    "      tf.keras.layers.Embedding(max_tokens, 32, mask_zero=True),\n",
    "      tf.keras.layers.GlobalAveragePooling1D(),\n",
    "    ])\n",
    "\n",
    "    self.title_vectorizer.adapt(movies)\n",
    "\n",
    "  def call(self, titles):\n",
    "    return tf.concat([\n",
    "        self.title_embedding(titles),\n",
    "        self.title_text_embedding(titles),\n",
    "    ], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "x6vssqPYp-gY"
   },
   "source": [
    "And expand it with hidden layers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "l1gTXkvQqHGA"
   },
   "outputs": [],
   "source": [
    "class CandidateModel(tf.keras.Model):\n",
    "  \"\"\"Model for encoding movies.\"\"\"\n",
    "\n",
    "  def __init__(self, layer_sizes):\n",
    "    \"\"\"Model for encoding movies.\n",
    "\n",
    "    Args:\n",
    "      layer_sizes:\n",
    "        A list of integers where the i-th entry represents the number of units\n",
    "        the i-th layer contains.\n",
    "    \"\"\"\n",
    "    super().__init__()\n",
    "\n",
    "    self.embedding_model = MovieModel()\n",
    "\n",
    "    # Then construct the layers.\n",
    "    self.dense_layers = tf.keras.Sequential()\n",
    "\n",
    "    # Use the ReLU activation for all but the last layer.\n",
    "    for layer_size in layer_sizes[:-1]:\n",
    "      self.dense_layers.add(tf.keras.layers.Dense(layer_size, activation=\"relu\"))\n",
    "\n",
    "    # No activation for the last layer.\n",
    "    for layer_size in layer_sizes[-1:]:\n",
    "      self.dense_layers.add(tf.keras.layers.Dense(layer_size))\n",
    "    \n",
    "  def call(self, inputs):\n",
    "    feature_embedding = self.embedding_model(inputs)\n",
    "    return self.dense_layers(feature_embedding)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Cc4KbTNwHSvD"
   },
   "source": [
    "### Combined model\n",
    "\n",
    "With both `QueryModel` and `CandidateModel` defined, we can put together a combined model and implement our loss and metrics logic. To make things simple, we'll enforce that the model structure is the same across the query and candidate models."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "26_hNJPKIh4-"
   },
   "outputs": [],
   "source": [
    "class MovielensModel(tfrs.models.Model):\n",
    "\n",
    "  def __init__(self, layer_sizes):\n",
    "    super().__init__()\n",
    "    self.query_model = QueryModel(layer_sizes)\n",
    "    self.candidate_model = CandidateModel(layer_sizes)\n",
    "    self.task = tfrs.tasks.Retrieval(\n",
    "        metrics=tfrs.metrics.FactorizedTopK(\n",
    "            candidates=movies.batch(128).map(self.candidate_model),\n",
    "        ),\n",
    "    )\n",
    "\n",
    "  def compute_loss(self, features, training=False):\n",
    "    # We only pass the user id and timestamp features into the query model. This\n",
    "    # is to ensure that the training inputs would have the same keys as the\n",
    "    # query inputs. Otherwise the discrepancy in input structure would cause an\n",
    "    # error when loading the query model after saving it.\n",
    "    query_embeddings = self.query_model({\n",
    "        \"user_id\": features[\"user_id\"],\n",
    "        \"timestamp\": features[\"timestamp\"],\n",
    "    })\n",
    "    movie_embeddings = self.candidate_model(features[\"movie_title\"])\n",
    "\n",
    "    return self.task(\n",
    "        query_embeddings, movie_embeddings, evaluate_metrics=not training)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "8YXjsRsLTVzt"
   },
   "source": [
    "## Training the model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "QY7MTwMruoKh"
   },
   "source": [
    "### Prepare the data\n",
    "\n",
    "We first split the data into a training set and a testing set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wMFUZ4dyTdYd"
   },
   "outputs": [],
   "source": [
    "tf.random.set_seed(42)\n",
    "\n",
    "shuffled = ratings.shuffle(100_000, seed=42, reshuffle_each_iteration=False)\n",
    "\n",
    "train = shuffled.take(80_000)\n",
    "test = shuffled.skip(80_000).take(20_000)\n",
    "\n",
    "cached_train = train.batch(2048).cache() #.shuffle(100_000)\n",
    "cached_test = test.batch(4096).cache()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "I2HEuTBzJ9w5"
   },
   "source": [
    "### Shallow model\n",
    "\n",
    "We're ready to try out our first, shallow, model!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "NkoLkiQdK4Um"
   },
   "outputs": [],
   "source": [
    "num_epochs = 100\n",
    "\n",
    "model = MovielensModel([64, 32])\n",
    "model.compile(optimizer=tf.keras.optimizers.Adam(0.000001))\n",
    "\n",
    "one_layer_history = model.fit(\n",
    "    cached_train,\n",
    "    validation_data=cached_test,\n",
    "    validation_freq=5,\n",
    "    epochs=num_epochs,\n",
    "    verbose=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# print(one_layer_history.history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top-100 accuracy: 0.07.\n"
     ]
    }
   ],
   "source": [
    "accuracy = one_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"][-1]\n",
    "print(f\"Top-100 accuracy: {accuracy:.2f}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "p90vFk8LvJXp"
   },
   "source": [
    "This gives us a top-100 accuracy of around 0.27. We can use this as a reference point for evaluating deeper models.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "BjJ1anzuLXgN"
   },
   "source": [
    "### Deeper model\n",
    "\n",
    "What about a deeper model with two layers?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "11qAr5gGMUxE"
   },
   "outputs": [
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-18-6392b1caa934>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0mvalidation_freq\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m     \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnum_epochs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m     verbose=0)\n\u001b[0m\u001b[1;32m     10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0maccuracy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtwo_layer_history\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"val_factorized_top_k/top_100_categorical_accuracy\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36m_method_wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    106\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_method_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    107\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_in_multi_worker_mode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m  \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 108\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    109\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    110\u001b[0m     \u001b[0;31m# Running inside `run_distribute_coordinator` already.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m   1096\u001b[0m                 batch_size=batch_size):\n\u001b[1;32m   1097\u001b[0m               \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_begin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1098\u001b[0;31m               \u001b[0mtmp_logs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtrain_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1099\u001b[0m               \u001b[0;32mif\u001b[0m \u001b[0mdata_handler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshould_sync\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1100\u001b[0m                 \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masync_wait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/def_function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m    778\u001b[0m       \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    779\u001b[0m         \u001b[0mcompiler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"nonXla\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 780\u001b[0;31m         \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    781\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    782\u001b[0m       \u001b[0mnew_tracing_count\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_tracing_count\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/def_function.py\u001b[0m in \u001b[0;36m_call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m    805\u001b[0m       \u001b[0;31m# In this case we have created variables on the first call, so we run the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    806\u001b[0m       \u001b[0;31m# defunned version which is guaranteed to never create variables.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 807\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateless_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# pylint: disable=not-callable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    808\u001b[0m     \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateful_fn\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    809\u001b[0m       \u001b[0;31m# Release the lock early so that multiple threads can perform the call\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m   2827\u001b[0m     \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lock\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2828\u001b[0m       \u001b[0mgraph_function\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_define_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2829\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mgraph_function\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_filtered_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2830\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2831\u001b[0m   \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36m_filtered_call\u001b[0;34m(self, args, kwargs, cancellation_manager)\u001b[0m\n\u001b[1;32m   1846\u001b[0m                            resource_variable_ops.BaseResourceVariable))],\n\u001b[1;32m   1847\u001b[0m         \u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1848\u001b[0;31m         cancellation_manager=cancellation_manager)\n\u001b[0m\u001b[1;32m   1849\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1850\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_call_flat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcaptured_inputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcancellation_manager\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36m_call_flat\u001b[0;34m(self, args, captured_inputs, cancellation_manager)\u001b[0m\n\u001b[1;32m   1922\u001b[0m       \u001b[0;31m# No tape is watching; skip to running the function.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1923\u001b[0m       return self._build_call_outputs(self._inference_function.call(\n\u001b[0;32m-> 1924\u001b[0;31m           ctx, args, cancellation_manager=cancellation_manager))\n\u001b[0m\u001b[1;32m   1925\u001b[0m     forward_backward = self._select_forward_and_backward_functions(\n\u001b[1;32m   1926\u001b[0m         \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/function.py\u001b[0m in \u001b[0;36mcall\u001b[0;34m(self, ctx, args, cancellation_manager)\u001b[0m\n\u001b[1;32m    548\u001b[0m               \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    549\u001b[0m               \u001b[0mattrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mattrs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 550\u001b[0;31m               ctx=ctx)\n\u001b[0m\u001b[1;32m    551\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    552\u001b[0m           outputs = execute.execute_with_cancellation(\n",
      "\u001b[0;32m~/anaconda3/envs/python3/lib/python3.6/site-packages/tensorflow/python/eager/execute.py\u001b[0m in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m     58\u001b[0m     \u001b[0mctx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mensure_initialized\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     59\u001b[0m     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,\n\u001b[0;32m---> 60\u001b[0;31m                                         inputs, attrs, num_outputs)\n\u001b[0m\u001b[1;32m     61\u001b[0m   \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     62\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "model = MovielensModel([64, 32])\n",
    "model.compile(optimizer=tf.keras.optimizers.Adagrad(0.000001))\n",
    "\n",
    "two_layer_history = model.fit(\n",
    "    cached_train,\n",
    "    validation_data=cached_test,\n",
    "    validation_freq=5,\n",
    "    epochs=num_epochs,\n",
    "    verbose=0)\n",
    "\n",
    "accuracy = two_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"][-1]\n",
    "print(f\"Top-100 accuracy: {accuracy:.2f}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "NHnzYfQrOj8I"
   },
   "source": [
    "The accuracy here is 0.29, quite a bit better than the shallow model.\n",
    "\n",
    "We can plot the validation accuracy curves to illustrate this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "xzriiDRlHEvo"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f929c3302e8>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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goIgCAJSU1Pbdb2NjQ3s7e072hyZsqyz+rLXCOPFQURERETt0uEkYd68edi2bRsGDhzYrutfffVVxMfHt30h9T7Z5/VlTyYJRERERD1dh+ckODo64o477hAzFuqtshv1JHgON14cRERERNQu3EyNupaqAii4qC1LpIDHUOPGQ0RERERt6pIk4ejRo1i7dm1X3JpMTU4iIGi0ZZcgwNLOuPEQERERUZu6JElISkrCtm3buuLWZGo41IiIiIjI5HC4EXUtrmxEREREZHKYJFDXyj6nL3NlIyIiIiKTwCSBuk5VCVCUpi1LzQD3MOPGQ0RERETt0iVJQmBgIO69996uuDWZkpxG+yO4hwHmVsaLhYiIiIjarcP7JLRmxowZmDFjRlfcmkxJFictExEREZmiLkkSbt68ifLycsjlcvj4+HRFE2QKmqxsxPkIRERERKZCtCRBqVTik08+we7du1FeXq6rl8vl+Mtf/oJnnnkGdnZcI79PyW403IgrGxERERGZDFGShOLiYixevBjXrl2DpaUlQkND4erqioKCAqSlpSEqKgpxcXHYtm0bHB0dxWiSejplAVB6U1s2swJcg40bDxERERG1myhJwkcffYT09HTMnz8f//znP+Hk5KQ7V1RUhI8++gjbt2/Hxx9/jDfeeEOMJqmnazzUqH8EIDM3XixEREREdFtEWd3o8OHDGDZsGNasWdMkQQAAJycnvPXWW4iIiEB0dLQYzZEpaLw/AocaEREREZkUUZKE8vJyREZGtnrN6NGjm8xVoF6OKxsRERERmSxRkgQ/Pz8oFIpWr1EoFPDz8xOjOerpBIErGxERERGZMFGShMWLF+PXX39Fenq6wfNpaWn49ddfsWTJEjGao56uLAuoKNCWLeSA80DjxkNEREREt0WUicvh4eEYPXo05s6di/nz52PUqFFwdnaGQqHAyZMnsX37dowdOxZhYWFISUlp8tqwsDAxQqCepMlQo2GAtEs29iYiIiKiLiJKkjB37lxIJBIIgoCtW7ciKipKd04QBADayc2HDx9u9trU1FQxQqCeJJvzEYiIiIhMmShJwvLly8W4DfUWXNmIiIiIyKSJkiS89NJLYtyGegNBaJoksCeBiIiIyORwsDiJqygdqC7Vlq2dAAeuaEVERERkakTpSWgsNTUVFy5cQHl5Oezs7BAWFoaQkBCxm6Ge6tah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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 273,
       "width": 388
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_validation_runs = len(one_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"])\n",
    "epochs = [(x + 1)* 5 for x in range(num_validation_runs)]\n",
    "\n",
    "plt.plot(epochs, one_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"], label=\"1 layer\")\n",
    "plt.plot(epochs, two_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"], label=\"2 layers\")\n",
    "plt.title(\"Accuracy vs epoch\")\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.ylabel(\"Top-100 accuracy\");\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "5ItwGCpXj9YF"
   },
   "source": [
    "Even early on in the training, the larger model has a clear and stable lead over the shallow model, suggesting that adding depth helps the model capture more nuanced relationships in the data.\n",
    "\n",
    "However, even deeper models are not necessarily better. The following model extends the depth to three layers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "es9k4o0ROt0l"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top-100 accuracy: 0.28.\n"
     ]
    }
   ],
   "source": [
    "model = MovielensModel([128, 64, 32])\n",
    "model.compile(optimizer=tf.keras.optimizers.Adagrad(0.1))\n",
    "\n",
    "three_layer_history = model.fit(\n",
    "    cached_train,\n",
    "    validation_data=cached_test,\n",
    "    validation_freq=5,\n",
    "    epochs=num_epochs,\n",
    "    verbose=0)\n",
    "\n",
    "accuracy = three_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"][-1]\n",
    "print(f\"Top-100 accuracy: {accuracy:.2f}.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "gLJV8jut40Ur"
   },
   "source": [
    "In fact, we don't see improvement over the shallow model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "pIoVoMO1Kav6"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f927871fb00>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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at4fw8IUJHQQmmokIiIizS0yMpLx48dz6NAhMjMzKS4uxsHBAV9fX5588kliY2Nxc3NrVBsvvfQS7u7urF+/nrVr1+Li4kJkZCQzZsww7nBcl6effpqFCxdia2vLU089VWe5adOmER4ezsqVKzl48CA7d+7E2dmZ7t27M378eEaPHl3v/oaFhfEf//EfpKWlkZycTGFhIe7u7oSGhhIbG8vDDz9c77qakoKEDkJJyyIiItLcgoKCeP311y1WX1ZWVo1rtra2vPDCC7zwwgs17i1YsIAFCxbUWV9mZiYVFRWMGDHCZGWi2gwaNIhBgwbVq59Vu0nXpkePHrz88sv1qqclKSehg8gryjMeayRBREREBONOzM8991wL96T1aZMjCefPn+e9994jOTmZK1eu4OXlRVRUFNOnT6934suePXtITk4mIyODjIwMCgsLCQ8PZ82aNXd8dseOHaxZs4Zjx45RUlKCh4cHISEh/OIXv2DAgAGN/XhN4ifdfkJuYS6hHqEEuAa0dHdEREREWkRWVha7du0iPT2dpKQkHn30Ue65556W7lar0+aChNOnTzNx4kTy8/OJiorC39+fr7/+msTERJKTk1mzZs0dh4sAVq9ezY4dO+jcuTN9+vShsLDwjs9UVFTw+uuvs27dOnr27Mnjjz9uTMA5evQo6enprTZIeCvyLcYFjSPQLRAba/OWGRMRERFp69LT03nnnXdwdnZmxIgRFp0O1Z60uSDhzTffJD8/n1dffZXY2Fjj9bi4OJYvX867777LW2+9dcd6pk6dysyZM/H39+e7774jKirqjs8sW7aMdevW8eSTTzJv3rwaW2eXlZU1/AM1ExtrGwZ4tc4ARkRERKS5xMTEEBMT09LdaPXaVE7CmTNnSElJwdvbm2effdbk3osvvoijoyOff/45paV33uJ84MCB9O3bt96bd5SUlJCQkECPHj1qDRAA7Ozs6vdBRERERERasTYVJOzbtw+AoUOHYm1t2nVnZ2fCw8O5du0aR48etXjbO3bsoLS0lFGjRlFRUcHmzZtZunQpq1evJjMz884ViIiIiIi0EW1qutHJkycB8PX1rfV+nz59SElJITc3lyFDhli07X/+859A5WjBqFGjOHv2rMn94cOHs3DhQhwcHOpVX0ZGxp0LSbty7do1QO++o9L779j0/js2vf+Ora2+/zY1klBSUgKAi4tLrferrhcXF1u87cuXLwOVS2V17dqV9evXc+jQIdavX09YWBhbtmzhzTfftHi7IiIiIiLNrU2NJNyJwWAAKrfZtrSbN28C0LlzZ/7yl7/g6ekJwN13383777/P8OHD+eyzz5g5cybdu3e/Y30hIdrQrKOp+gVB775j0vvv2PT+Oza9/46tJd//wYMHzX62TY0kODs7A3WPFFSNNFSVs6Sq/RcGDBhgDBCqeHl5cc8991BRUWGcliQiIiIi0la1qSDB398fgFOnTtV6Py+vcldhPz8/i7ddVWddU526dOkCwA8//GDxtkVEREREmlObChIiIiIASElJoaKiwuReSUkJhw4dwt7evkl2zatKhD5x4kSt96uue3t7W7xtEREREZHm1KaCBB8fH4YOHcrZs2dZvXq1yb34+HhKS0t58skncXR0NF7PyckhJyen0W3369eP8PBwcnJyWL9+vcm99evXk5OTg4+PDz/5yU8a3ZaIiIiISEtqc4nLr7/+OhMnTmTevHns3buXgIAAjh49SmpqKr6+vsycOdOk/KhRowDIysoyuX7gwAE+/vhjAOPma3l5ecyePdtYZsGCBSbPzJ8/n0mTJvHqq6+ydetWAgMDycnJYffu3Tg4OBAXF1fvzdlERERERFqrNhck+Pj48Mknn7B48WKSk5NJSkrC09OT2NhYpk+fjpubW73qOX36NBs3bjS5lp+fb3Ltx0GCv78/GzduZMmSJSQlJbF3715cXV0ZPXo0v/rVrwgICGj8BxQRERERaWFtLkgA6NmzJ3FxcfUq++MRhCoxMTHExMSY1fb8+fMb/JyIiIiISFvRpnISRERERESk6SlIEBEREREREwoSRERERETEhIIEERERERExYWUwGAwt3YmO5ODBgy3dBRERERHpQO69994GP6ORBBERERERMaGRBBERERERMaGRBBERERERMaEgQURERERETChIEBEREREREwoSRERERETEhIIEERERERExoSBBRERERERM2LZ0B0TasoKCArZv386uXbvIzs7mwoUL2NnZERQURExMDGPHjsXaumYsfujQId5//32OHj3KDz/8gI+PD2PHjiU2NhYbG5sW+CRiSZ9++imvvPIKAPPmzWPcuHE1ynz55ZcsW7aMb775hoqKCgIDA5k0aRJPP/10c3dXLOTAgQOsWLGCw4cPc+XK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fHygUChQVFTU7BVpLl26BABwdHQEwHOAqWnK+b+vbNSkqb3pMrjMv+kzJMdGOy489TszEJmYmJgYoVKpRGhoqLh161aLsVVVVWL48OG8kc5zIDo6utmbqV25csUob5pDhluxYoVQqVRi8+bNsvbU1FTh7u4uhg0bJiorK4UQPAeYmh9//FGoVCoxcuRIcf36ddm2lJQU4e7uLry8vER5ebkQgvk3BY9zM7XW5thYxwUzIf63GoKIWu27777DRx99hE6dOmHOnDnNTjlwdHTE9OnTpe81Gg2WLl0KpVKJCRMmwMbGBlqtFgUFBQgKCsKWLVu4aM0EfPnll4iJicHatWvx2muvybbt2bMHa9euha2tLSZMmABzc3McO3YM169fx4IFC/Dhhx8+o16TIcrKyvDmm2+iqKgIPj4+8Pb2xtWrV6HRaGBmZoaNGzciJCREiuc5wHTodDosXLgQJ0+ehLW1NcaPH4+ePXsiPz8fKSkpEELg448/xrx586R9mP+OR6PRQKPRAABu3LiB1NRUODs7w8fHBwDQvXt32XnbkBwb47jAIoHoCTS9EWyJn58f9uzZI2vLzMzE119/jezsbNTW1qJfv36YMWMGwsLCZDdfo46rpSIBALRaLeLi4vDHH39ACAE3NzfMmTMHoaGhz6C39KQqKiqwdetW/PLLLygtLYW1tTVeeuklhIeHY8iQIXrxPAeYjvr6euzduxdHjx7F5cuXce/ePdjY2MDb2xthYWHS4vUHMf8dy6PGekdHR2i1WlmbITk2tnGBRQIREREREclw4TIREREREcmwSCAiIiIiIhkWCUREREREJMMigYiIiIiIZFgkEBERERGRDIsEIiIiIiKSYZFAREREREQyLBKIiIiIiEiGRQIREREREcmwSCAiIiIiIhkWCUREREREJMMigYiInjthYWFwd3d/1t0gIjJaLBKIiIiIiEiGRQIREREREcmwSCAiIiIiIhnFs+4AERF1XOfOncPOnTuRmZmJyspK2NnZITAwEO+88w769OkjxYWFhSE9PR25ubmIjY3F4cOHUVpaCnt7e0ybNg2LFy+GhYWF3vHT0tKwY8cO5ObmoqamBn379sX48eMRHh6Orl276sVXVFRg165dOH78OIqLi6FQKODo6IgxY8bg7bffhpWVlSy+oaEBO3bswMGDB3Ht2jXY2dlh0qRJWLZsWbP9ISJ6XpgJIcSz7gQREXU8Bw4cwKeffgoLCwuo1WrY29ujqKgIWq0WdnZ2SEpKQt++fQH8v0hQq9XIzc1FcHAwFAoFjh8/jitXrmDs2LHYunUrzMzMpOPv27cPa9asgaWlJYKDg2FnZ4f09HScO3cO/fv3R2JiIrp16ybFFxcXY968ebh69So8PT3h5+cHnU6HwsJCnDx5EsnJyXBycpL1Jzg4GJmZmRg9ejS6dOmCEydOoLCwENOnT0dUVNTTfUKJiIwIiwQiImq1goICTJ48GQ4ODkhISJB9apCWloYFCxZArVYjNjYWwP/flLu4uCApKQk2NjYAgNraWsydOxfZ2dn4/PPPMW3aNADA1atXERQUBAsLC+zfvx9ubm7S8desWYPExES8/vrr+Oyzz6T2WbNmISsrC8uXL0d4eLisv+Xl5bC2toZSqZT1x9PTE3FxcbC1tQUAVFdXY+rUqSgpKcGJEyfQq1evdnj2iIiMH9ckEBFRqyUmJqK+vh6rV6+WFQgAMGLECKjVavz666+4c+eObNuSJUukAgEAlEolli9fDuD+JxNNfvjhB9TX12POnDmyAgEA3n//fVhbW+PQoUOoq6sDAJw/fx5ZWVkYOHAgFi1apNffHj16SAXCgyIiIqQCAQCsrKwwefJk6HQ6nD9//nGfDiIik8M1CURE1GrZ2dkAIK0z+LeysjI0NjaisLAQgwcPltr9/Pz0Yn18fKBQKJCXlye1XbhwAQDg7++vF29jY4NBgwYhIyMDf/31Fzw8PHDu3DkAQEBAAP7zn8f/+9eDfWvi4OAAAKisrHzs4xARmRoWCURE1GoVFRUAgJ07d7YYV11dLfu+Z8+eejGdOnWCra0tysrKpLaqqioAeOh0n6b227dvy/7996caj/LgmoYH+wMAOp2uVcciIjIlLBKIiKjVunTpAgDIzMyUHj+OmzdvSouZmzQ2NqKiokJ2nKYrF928eRMDBgzQO86NGzdkcU1v9v/5559W/BRERPQwXJNAREStNmTIEADAmTNnWrVfenq6XtuZM2fQ0NCAgQMHSm1Nj0+fPq0Xf/v2beTl5UGpVErrFV588UUAQGpqKj8BICJqAywSiIio1WbPng1zc3NERUWhoKBAb3tdXV2zBcTWrVtlc/1ra2uxefNmAMCMGTOk9ilTpsDc3BwJCQkoKiqSHWPLli24c+cOpkyZIt3LYPDgwRg6dCjy8vKwfft2vf/31q1bqK2tNeyHJSJ6DnG6ERERtZqbmxvWrVuH1atXY9KkSRg9ejRcXFzQ0NCAa9euITMzE927d0dycrJsP1dXV0ycOFHvPgkvv/wypk6dKsU5OTlh1apViIyMRGhoKEJCQtCjRw9kZGQgKysLrq6uiIiIkB17w4YNmDt3LjZv3oxjx45h+PDhEEKgsLAQv//+O3766SfpPglERNQyFglERGSQqVOnwsPDA7t27cLp06eRmpoKKysr9O7dG0FBQQgJCdHbZ8uWLbI7Lvfp0wfvvvsuFi9eLLuRGnD/04p+/fohLi4OP//8M2pqauDg4ICFCxfirbfe0lt07OzsjIMHD2LHjh3QaDRISEiAUqmEo6MjFixYADs7u3Z9PoiITAlvpkZERO2u6eZlf/7557PuChERPQauSSAiIiIiIhkWCUREREREJMMigYiIiIiIZLgmgYiIiIiIZPhJAhERERERybBIICIiIiIiGRYJREREREQkwyKBiIiIiIhkWCQQEREREZEMiwQiIiIiIpJhkUBERERERDIsEoiIiIiISIZFAhERERERybBIICIiIiIiGRYJREREREQkwyKBiIiIiIhkWCQQEREREZHMfwFDc1CzFRnUNwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 273,
       "width": 388
      }
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, one_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"], label=\"1 layer\")\n",
    "plt.plot(epochs, two_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"], label=\"2 layers\")\n",
    "plt.plot(epochs, three_layer_history.history[\"val_factorized_top_k/top_100_categorical_accuracy\"], label=\"3 layers\")\n",
    "plt.title(\"Accuracy vs epoch\")\n",
    "plt.xlabel(\"epoch\")\n",
    "plt.ylabel(\"Top-100 accuracy\");\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "wC95C1anA5Gx"
   },
   "source": [
    "This is a good illustration of the fact that deeper and larger models, while capable of superior performance, often require very careful tuning. For example, throughout this tutorial we used a single, fixed learning rate. Alternative choices may give very different results and are worth exploring. \n",
    "\n",
    "With appropriate tuning and sufficient data, the effort put into building larger and deeper models is in many cases well worth it: larger models can lead to substantial improvements in prediction accuracy.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "dB09crfpgBx7"
   },
   "source": [
    "## Next Steps\n",
    "\n",
    "In this tutorial we expanded our retrieval model with dense layers and activation functions. To see how to create a model that can perform not only retrieval tasks but also rating tasks, take a look at [the multitask tutorial](https://github.com/tensorflow/recommenders/blob/main/docs/examples/multitask.ipynb)."
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "deep_recommenders.ipynb",
   "private_outputs": true,
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "conda_python3",
   "language": "python",
   "name": "conda_python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
